home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / AMIGATAX / AMIGATAX.ADF / tax91 < prev    next >
Text File  |  1992-02-07  |  12KB  |  490 lines

  1. 0 REM tax91v0.0 feb05/92
  2. 1 DATA = ontario tax retrn =,$1991
  3. 2 DATA ...jim butterfield...,c0;0
  4. 3 DATA ====page 1====,c0
  5. 4 DATA income from emplyment,z2;i2
  6. 5 DATA pension income,i2
  7. 6 DATA family allowance,i2
  8. 7 DATA divds tax cadn corpns,#03;i2
  9. 8 DATA other income,i2
  10. 9 DATA total income,#04;c3;s2
  11. 10 DATA ====step 3====,c0
  12. 11 DATA total income,c3;v04
  13. 12 DATA reg pension contr,z3;i3
  14. 13 DATA union/prof dues,i3
  15. 14 DATA carrying charges,i3
  16. 15 DATA other deductions,i3
  17. 16 DATA total deductions,#05;c4;s3
  18. 17 DATA line 234,c4;v04-v05
  19. 18 DATA sb repayment,#06;i3
  20. 19 DATA net income,#07;c4;v04-v05-v06
  21. 20 DATA total dedns net inc,z3;i3
  22. 21 DATA taxable income,#08;c4;v07-s3
  23. 22 DATA ====step 4====,c0
  24. 23 DATA personal credit,z3;c3;6280
  25. 24 DATA age credit,i3[3387
  26. 25 DATA credit for spouse,i3[5233
  27. 26 DATA credit for children,i3
  28. 27 DATA cpp contributions,i3[632.50
  29. 28 DATA uic contributions,i3[892.84
  30. 29 DATA total medical expses,#13;i2
  31. 30 DATA ..less 3% n.i.,#14;(v13>0);v07%3[1570;c2
  32. 31 DATA allowable medical exp,(v13>0);v13-v14]0;c3
  33. 32 DATA other credits,i3
  34. 33 DATA line 335,#09;c4;s3[v08:REM guide confusing
  35. 34 DATA tax credits,z4;c4;v09%17
  36. 35 DATA charitable donations,#11;i2
  37. 36 DATA credit at 17%,(v11>0);c4;v11[250%17
  38. 37 DATA credit at 29%,(v11>250);c4;v11-250]0%29
  39. 38 DATA total tax credits,#12;s4;c4
  40. 39 DATA =====schedule  1===,c0
  41. 40 DATA brckt,#15;v08;x;57568;28784;0
  42. 41 DATA ..on first,v15;c1
  43. 42 DATA ..tax is,#16;c2;y;12377;4893;0
  44. 43 DATA ..on remaining,#17;c1;v08-v15
  45. 44 DATA ..tax at percent..,#18;c1;y;29;26;17
  46. 45 DATA ..gives,#19;c2;v17%v18
  47. 46 DATA total,#20;c3;v16+v19
  48. 47 DATA total nr tax credit,v12;z3;c3
  49. 48 DATA divd tax credit,c3;v03%40/3[v20
  50. 49 DATA total credits,#21;c4;s3
  51. 50 DATA basic federal tax,#22;c4;v20-v21]0
  52. 51 DATA forgn tax deductions,#23;i3
  53. 52 DATA federal tax,#24;c4;v22-v23
  54. 53 DATA surtax 1,z3;(v22>0);c3;v22%5
  55. 54 DATA surtax 2,(v22>12500);c3;v22-12500]0%5
  56. 55 DATA indiv surtax payable,#28;c4;s3
  57. 56 DATA ===ontario tax===,c0
  58. 57 DATA basic ontario tax,#30;c3;v22%53
  59. 58 DATA ontario surtax,#31;c3;v30-10000]0%12
  60. 59 DATA adjusted tax,#32;c4;v30+v31
  61. 60 DATA ..ont tax reduction..,c0;0
  62. 61 DATA # dependents,#62;i1
  63. 62 DATA basic amount,z3;c3;167
  64. 63 DATA plus dependents,(v62>0);c3;v62*350
  65. 64 DATA totl pers amt,#63;c3;s3
  66. 65 DATA b times 3,#64;c2;v63*3
  67. 66 DATA a times 2,#65;c2;v32*2
  68. 67 DATA ont tax redctn,#66;c4;v64-v65]0
  69. 68 DATA ontario tax,#36;c4;v32-v66]0
  70. 69 DATA ==ont tax credits==,c0
  71. 70 DATA ontario tax credits,#50;i4
  72. 71 DATA ..complete form t1c,(v50>0);c0;0
  73. 72 DATA .spouse incm needed,(v50>0);c0;0
  74. 73 DATA ===step 5===,c0
  75. 74 DATA federal tax,c4;v24]0
  76. 75 DATA federal tax credits,#51;i3
  77. 76 DATA fed tax line 417,#52;c4;v24-v51]0
  78. 77 DATA indiv surtax payable,c4;v28
  79. 78 DATA net federal tax,#53;c4;v52+v28
  80. 79 DATA ontario tax payable,#54;c3;v36
  81. 80 DATA total payable,#55;c4;v53+v54
  82. 81 DATA child tax credit,z3;i3
  83. 82 DATA fed sales tax credit,i3
  84. 83 DATA ....do schedule 7...,(s3>0);c0;0
  85. 84 DATA .spouse incm needed.,(s3>0);c0;0
  86. 85 DATA ontario tax credits,c3;v50
  87. 86 DATA tax deducted /slips,i3
  88. 87 DATA other credits,i3
  89. 88 DATA total credits,#58;c4;s3
  90. 89 DATA x,#59;v55-v58;(v58>v55);v58-v55
  91. 90 DATA x,$;----------
  92. 91 DATA * no balance *,#60;1;(v59<1);c0;0
  93. 92 DATA x,#61;v60;(v58>v55);2*v60
  94. 93 DATA * refund due *,(v61=2);c2;v59
  95. 94 DATA * balance payable *,(v61=1);c2;v59
  96. DATA end,end,end
  97.  
  98. REM: **** r u g  -  report utility generator ****
  99. REM: command lines... ( c$(.) )
  100. REM:   a series of commands, each of which is separated
  101. REM:           by a semicolon;
  102. REM:   line starting with # identifies variable line.
  103. REM:   line starting with $ is special titling line.
  104. REM: commands...
  105. REM:   may be an expression (see below), or:
  106. REM:   c# - print in column  (#=0 to 4, 0=no print)
  107. REM:   z# - clear column total (#=1 to 4)
  108. REM:   t# - print column total (#=1 to 4)
  109. REM:    (z or t may have multiples, e.g., z1234)
  110. REM:   j# - jump to specified line
  111. REM: expressions...
  112. REM:   (parentheses for test)  .. continue line if true (<>0)
  113. REM:   following may be mixed using operators (below)
  114. REM:     numeric values;
  115. REM:     i# for keyboard input (# is column);
  116. REM:     s# for column total   (# is column);
  117. REM:     v# for variable value;
  118. REM:     n   gets yes/no value
  119. REM:  operators (left-to-right evaluation):
  120. REM:   + addition   - subtraction
  121. REM:   * multiply   / divide
  122. REM:   % percentage (multiply)
  123. REM:   [ smaller of      ] greater of
  124. REM:   (example:  22[7 returns 7)
  125. REM:   > < = comparisons:  yield 0 (not true) or 1 (true)
  126. REM:   comparisons may be used multiply, e.g., v5<=100
  127. REM: examples...
  128. REM:      i3+100[500
  129. REM:   input value, add 100, if over 500 set to 500
  130. REM:   print result in column3
  131. REM:      c3;v12%10[100
  132. REM:   take 10% of value 12 (line 12) minimum 100
  133. REM:   and print in column 3
  134. REM:      500;(v15>1000);v15/2
  135. REM:   value 500; or if value 15 is greater than 1000
  136. REM:      set value v15/2.  do not print (no 'c' set).
  137. CLS
  138. PRINT " ."
  139. Ll=0
  140. FOR j=5 TO 6
  141.  FOR k=11 TO 12
  142.   Ll=Ll+POINT(k,j)
  143.  NEXT k
  144. NEXT j
  145. IF Ll=4 THEN Ll=80 ELSE Ll=60
  146. PRINT "Please wait..."
  147. PRINT
  148. PRINT "When prompted, you may enter:"
  149. PRINT "    [RETURN] (for 'zero' input);"
  150. PRINT "    numeric value <return>;"
  151. 'PRINT "    numeric value   +  "
  152. 'PRINT "      (to have items totalled);
  153. PRINT "    [F1][RETURN]   (to review or change data)."
  154. PRINT
  155. PRINT "Ontario income tax"
  156. PRINT
  157. PRINT "This program does not give tax advice"
  158. PRINT "  ..just helps with the arithmetic."
  159. PRINT
  160. PRINT "This is *not* the computer tax format"
  161. PRINT "accepted for filing by Revenue Canada."
  162. PRINT
  163. PRINT "Some tax calculations call for spouse's income"
  164. PRINT " .. not detailed in this program."
  165. PRINT
  166. DIM i$(200),i%(200),v&(200),c$(200),c%(4),t&(4)
  167. c%(1)=1:c%(2)=2:c%(3)=4:c%(4)=8
  168. READ i$
  169. j=0
  170. WHILE i$<>"end"
  171.  j=j+1
  172.  READ c$
  173.  L0=1
  174.  IF LEFT$(c$,1)="#" THEN
  175.   L0=INSTR(c$,";")
  176.   t=VAL(MID$(c$,2,L0-1))
  177.   IF i%(t)<>0 GOTO LinErr1
  178.   i%(t)=j:L0=L0+1
  179.  END IF
  180.  i$(j)=i$:c$(j)=MID$(c$,L0)
  181.  READ i$
  182. WEND
  183. PRINT
  184. OPEN "scrn:" FOR OUTPUT AS #4
  185. c1=1
  186.     'Next Item
  187. NxLine:
  188.  WHILE c$(c1)<>"" 
  189.  c0=-1:t3=0:c=c1:c1=c1+1
  190.  IF c$(c)="c0" THEN c9=c
  191.  L0=1:L1=LEN(c$(c))
  192.  InptFlg=0
  193.  IF ASC(c$(c))=36 THEN
  194.       ' $ at start of line
  195.   GOSUB BuckLine
  196.  ELSE
  197.   WHILE L0<=L1
  198.    L2=INSTR(MID$(c$(c),L0),";")
  199.    IF L2=0 THEN L2=L1+1 ELSE L2=L2+L0-1
  200.    ComdLen=L2-L0
  201.    t=ASC(MID$(c$(c),L0)):IF t>96 THEN t=t-32
  202.    IF t=67 OR (PrtFlg AND t=73) THEN  ' c or i/print
  203.      REM: c - set column value
  204.      c0=VAL(MID$(c$(c),L0+1,ComdLen-1)):e=(c0>4):IF e GOTO LinErr1
  205.      c0=c%(c0)
  206.    ELSEIF t=40 THEN     '  REM (
  207.     REM: (..) evaluate and continue/quit
  208.     e=ASC(MID$(c$(c),L2-1))<>41:IF e GOTO LinErr1
  209.     e=(L2-L0)<3:IF e GOTO LinErr1
  210.     L8=L0+1:L9=L2-1:GOSUB Eval
  211.     IF v#=0 THEN L2=L1  'exit
  212.    ELSEIF t=74 THEN     '  REM j
  213.     REM: j - jump to line
  214.     v=VAL(MID$(c$(c),L0+1,ComdLen-1))
  215.     c1=i%(v)
  216.     L2=L1  'exit
  217.    ELSEIF PrtFlg THEN
  218.     ' pass 2 .. don't calculate
  219.    ELSEIF t=88 THEN     '  REM x
  220.     REM x - table lookup
  221.     y=0:v0#=v&(c)/100#:v#=v0#+1#
  222.     L0=L2+1
  223.     WHILE v#>v0# AND L0<=L1
  224.      y=y+1
  225.      L2=INSTR(MID$(c$(c),L0),";")
  226.      IF L2=0 THEN L2=L1+1 ELSE L2=L2+L0-1
  227.      ComdLen=L2-L0
  228.      v#=VAL(MID$(c$(c),L0,ComdLen))
  229.      L0=L2+1
  230.     WEND
  231.     v&(c)=INT(v#*100#+.5#)
  232.     L2=L1    'exit
  233.    ELSEIF t=89 THEN    '  REM y
  234.     REM y - table usage
  235.     y1=0
  236.     L0=L2+1
  237.     WHILE y1<y AND L2<L1
  238.      y1=y1+1
  239.      L2=INSTR(MID$(c$(c),L0),";")
  240.      IF L2=0 THEN L2=L1+1 ELSE L2=L2+L0-1
  241.      ComdLen=L2-L0
  242.      v#=VAL(MID$(c$(c),L0,ComdLen))
  243.      L0=L2+1
  244.     WEND
  245.     v&(c)=INT(v#*100#+.5#)
  246.     L2=L1   'exit
  247.    ELSEIF t=84 OR t=90 THEN
  248.       '  T/Z multiple column functions
  249.     c8=c0:c0=0
  250.     FOR j=L0+1 TO L2-1
  251.      t0=VAL(MID$(c$(c),j,1))
  252.      c0=c0 OR c%(t0)
  253.     NEXT j
  254.     IF t=90 THEN
  255.      FOR j=1 TO 4
  256.       IF (c0 AND c%(j))<>0 THEN t&(j)=0
  257.      NEXT j
  258.      c0=c8
  259.     ELSE
  260.      t3=1
  261.     END IF
  262.    ELSE
  263.     GOSUB SeekVal
  264.     IF t0 AND NOT InptFlg THEN
  265.      L8=L0:L9=L2:GOSUB Eval
  266.      IF ASC(RIGHT$(" "+v$,1))=129 GOTO Revise 
  267.     END IF
  268.     IF t0=0 GOTO LinErr0
  269.     v&(c)=INT(v#*100+.5)
  270.    END IF
  271.    L0=L2+1
  272.   WEND
  273.   GOSUB Echo
  274.  END IF
  275. WEND
  276.  
  277. REM: end of control strings
  278. IF PrtFlg=0 THEN
  279.  IF c9=0 GOTO AskPrint
  280.  INPUT "want to revise this";x$
  281.  x$=UCASE$(x$)
  282.  IF x$="Y" OR x$="YES" GOTO Revise
  283. AskPrint: 
  284.  CLOSE 4:INPUT "want a printout";x$
  285.  x$=UCASE$(x$)
  286.  IF x$="Y" OR x$="YES" THEN
  287.   c1=1:OPEN "prt:" FOR OUTPUT AS #4:Ll=80:InptFlg=0:PrtFlg=-1
  288.   GOTO NxLine
  289.  END IF
  290. END IF
  291. PRINT ">>> end <<<"
  292. END
  293.  
  294.    ' revision time
  295. Revise:
  296.  IF c9>0 THEN
  297.   PRINT:r=0
  298.   FOR j=1 TO c9
  299.    IF c$(j)="c0" THEN r=r+1:PRINT r;">>> ";i$(j)
  300.   NEXT j
  301.   r1=1
  302.   IF r>1 THEN
  303.     PRINT "go back to which one (1 to";r;")";
  304.     INPUT r1
  305.   END IF
  306.   IF r1>0 AND r1<=r THEN
  307.    r=0
  308.    FOR j=1 TO c9
  309.     IF c$(j)="c0" THEN r=r+1:IF r=r1 THEN c=j
  310.    NEXT j
  311.   END IF
  312.  END IF
  313.  c1=c:GOTO NxLine
  314.  
  315. LinErr0:
  316.  PRINT "error item";c;"' ";MID$(c$(c),L0);" '":STOP
  317. LinErr1:
  318.  PRINT "error item";c;"' ";MID$(c$(c),L1);" '":STOP
  319. LinErr2:
  320.  PRINT "error item";c;"' ";MID$(c$(c),L8,L5-L8);" '":STOP
  321.  
  322. REM evaluate
  323. Eval:
  324.  v#=0:OpNow=10
  325.  REM get a command
  326.  WHILE L8<L9
  327.   PtOp2=L8:t0=0
  328.   GOSUB SeekOp
  329.   OpNext=t0
  330.   L5=PtOp1
  331.   e=L5<=L8:IF e GOTO LinErr2
  332.   t=ASC(MID$(c$(c),L8))
  333.   IF t>96 THEN t=t-32
  334.   GOSUB SeekVal
  335.   e=t0=0:IF e GOTO LinErr2
  336.   IF (t>47 AND t<58) OR t=46 THEN
  337.    ' Numeric
  338.    v0#=VAL(MID$(c$(c),L8,L5-L8))
  339.   ELSEIF t=83 OR t=86 THEN
  340.    ' S or V
  341.    v1=VAL(MID$(c$(c),L8+1,L5-L8-1))
  342.    IF t=83 THEN v0#=t&(v1)/100#
  343.    IF t=86 THEN
  344.    e=i%(v1)=0
  345.    IF e THEN PRINT "** no param";v1:GOTO LinErr2
  346.    v0#=v&(i%(v1))/100#
  347.    END IF
  348.   ELSEIF t=78 THEN
  349.       '  Y or N
  350.    e=InptFlg:IF e GOTO LinErr2
  351.    REM: y for yes/no
  352.    WINDOW 2,"[Y] or [N]",(10,10)-(400,30),24
  353.    WINDOW OUTPUT 2
  354.    InptFlg=-1
  355.    PRINT i$(c);"(y/n) ";
  356.    INPUT y$:y$=UCASE$(y$)
  357.    WINDOW CLOSE 2
  358.    v0#=0:IF y$="Y" THEN v0#=1
  359.   ELSE
  360.      'Inpt
  361.    e=InptFlg:IF e GOTO LinErr2
  362.    InptFlg=-1
  363.    c0=VAL(MID$(c$(c),L8+1,L5-L8-1))
  364.    e=(c0<1 OR c0>4)
  365.    IF e GOTO LinErr2
  366.    c0=c%(c0)
  367.    IF v&(c)=0 THEN
  368.     WINDOW 2,i$(c),(10,10)-(400,30),24
  369.    ELSE
  370.     GOSUB DolCents:v$=LEFT$(v$,1)+d$
  371.     IF c$<>"00" THEN v$=v$+".":v$=v$+c$
  372.     WINDOW 2,"[RETURN]="+v$,(10,10)-(400,30),24
  373.    END IF
  374.    WINDOW OUTPUT 2
  375.    PRINT i$(c);"? ";
  376.    LINE INPUT v$
  377.    IF v$<>"" THEN
  378.     v0#=VAL(v$)
  379.    ELSE
  380.     v0#=v&(c)/100#
  381.    END IF
  382.    WINDOW CLOSE 2
  383.    IF ASC(RIGHT$(" "+v$,1))=129 THEN RETURN
  384.   END IF
  385.   '  perform dyadic operation
  386.   ON OpNow GOSUB lt,eq,le,gr,ne,ge,br,pct,ml,ad,sb,div,flr,cei
  387.   OpNow=OpNext:L8=PtOp2
  388.  WEND
  389. RETURN
  390.  
  391. ad: v#=v#+v0#
  392.     RETURN
  393. sb: v#=v#-v0#
  394.     RETURN
  395. ml: v#=v#*v0#
  396.     RETURN
  397. div: v#=v#/v0#
  398.     RETURN
  399. pct: v#=v#*v0#/100#
  400.     RETURN
  401. flr: IF v#>v0# THEN v#=v0#
  402.     RETURN
  403. cei: IF v#<v0# THEN v#=v0#
  404.     RETURN
  405. lt: v#=-(v#<v0#)
  406.     RETURN
  407. eq: v#=-(v#=v0#)
  408.     RETURN
  409. le: v#=-(v#<=v0#)
  410.     RETURN
  411. gr: v#=-(v#>v0#)
  412.     RETURN
  413. ne: v#=-(v#<>0#)
  414.     RETURN
  415. ge: v#=-(v#>=0#)
  416.     RETURN
  417. br: v#=1
  418.     RETURN
  419.  
  420. Echo:
  421.  IF c0>=0 THEN
  422.   PRINT#4,LEFT$(i$(c)+SPACE$(21),21);" ";
  423.    IF c0>=1 THEN
  424.     FOR j=1 TO 4
  425.      IF (c0 AND c%(j))=0 THEN
  426.       IF Ll>60 OR j<>1 THEN PRINT#4,SPACE$(12);
  427.      ELSE
  428.       IF t3=0 THEN
  429.        t&(j)=t&(j)+v&(c)
  430.       ELSE
  431.        v&(c)=t&(j):t&(j)=0
  432.       END IF
  433.       GOSUB DolCents
  434.       cr$="  ":IF LEFT$(v$,1)="-" THEN cr$="cr"
  435.       d$=RIGHT$(SPACE$(6)+d$,6):cm$=MID$(d$,3,1)
  436.       IF cm$<>" " THEN cm$=","
  437.       PRINT#4,LEFT$(d$,3);cm$;MID$(d$,4);".";c$;cr$;
  438.      END IF
  439.     NEXT j
  440.    END IF 
  441.    PRINT#4,
  442.   END IF
  443. RETURN
  444.  
  445. DolCents:
  446.  v$=STR$(v&(c)):IF LEN(v$)<3 THEN v$=LEFT$(v$,1)+"0"+RIGHT$(v$,1)
  447.  c$=RIGHT$(v$,2):d$=MID$(v$,2,LEN(v$)-3)
  448.  IF LEN(d$)>6 THEN d$="******"
  449. RETURN
  450.  
  451.  REM: dollars line
  452. BuckLine:
  453.  PRINT#4,LEFT$(i$(c)+SPACE$(21),21);" ";
  454.  L0=2
  455. WHILE L0<=L1
  456.  L2=INSTR(MID$(c$(c),L0),";")
  457.  IF L2=0 THEN L2=L1+1 ELSE L2=L2+L0-1
  458.  ComdLen=L2-L0
  459.  IF L2>0 THEN PRINT#4,RIGHT$(SPACE$(10)+MID$(c$(c),L0,ComdLen),10);"  ";
  460.  IF L2=0 THEN PRINT#4,SPACE$(12);
  461.  L0=L2+1
  462. WEND
  463.  PRINT#4,
  464. RETURN
  465.  
  466.       ' value types
  467. SeekVal:
  468.  t0=INSTR("0123456789.IVSN",CHR$(t))
  469. RETURN
  470.       ' operators and comparison groups
  471. SeekOp:
  472.   PtOp1=0
  473.   t0=0
  474.   t2=0
  475.  WHILE PtOp2<L9 AND ((t0=0 AND PtOp1=0) OR (t0<>0 AND PtOp1<>0))
  476.   PtOp2=PtOp2+1
  477.   t1=t0
  478.   t0=INSTR("<==>===%*+-/[]",MID$(c$(c),PtOp2,1))
  479.   t2=t2 OR t0
  480.   IF t0<>0 AND PtOp1=0 THEN PtOp1=PtOp2
  481.  WEND
  482.  IF t1=t2 THEN
  483.   t0=t1
  484.  ELSE
  485.   IF t2<8 THEN t0=t2
  486.  END IF
  487.  IF PtOp1=0 THEN PtOp1=L9
  488. RETURN
  489. END
  490.